package com.maimang.platform.common.service.impl;

import com.maimang.platform.common.entity.SysFiles;
import com.maimang.platform.common.mapper.SysFilesMapper;
import com.maimang.platform.common.service.SysFilesService;
import com.maimang.platform.common.utils.file.FileUploadUtils;
import com.maimang.platform.common.utils.file.FileUtils;
import com.maimang.platform.constant.UserConstants;
import com.maimang.platform.lang.ConvertUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;
import java.util.List;

/**
 * @author Rocky
 * @version 1.0.0
 * @类名 SysFilesServiceImpl
 * @描述 <br>文件管理service实现</br>
 * @日期 2019-04-25
 * @email jintaozhao@qq.com
 */
@Service
public class SysFilesServiceImpl implements SysFilesService {

	@Autowired
	private SysFilesMapper sysFilesMapper;

	/**
	 * 查询文件上传信息
	 *
	 * @param fileId 文件上传ID
	 * @return 文件上传信息
	 */
	@Override
	public SysFiles selectSysFilesById(Long fileId) {
		return sysFilesMapper.selectSysFilesById(fileId);
	}

	/**
	 * 查询文件上传列表
	 *
	 * @param files 文件上传信息
	 * @return 文件上传集合
	 */
	@Override
	public List<SysFiles> selectSysFilesList(SysFiles files) {
		return sysFilesMapper.selectSysFilesList(files);
	}

	/**
	 * 新增文件上传
	 *
	 * @param files 文件上传信息
	 * @return 结果
	 */
	@Override
	public int insertSysFiles(SysFiles files) {
		return sysFilesMapper.insertSysFiles(files);
	}

	/**
	 * 修改文件上传
	 *
	 * @param files  文件上传信息
	 * @param isFile
	 * @return 结果
	 */
	@Override
	public int updateSysFiles(SysFiles files, Boolean isFile) {
		int result = 0;
		//修改新数据
		result = sysFilesMapper.updateSysFiles(files);
		if (result > 0) {
			//先判断有没有文件
			SysFiles oldFiles = sysFilesMapper.selectSysFilesById(files.getFileId());
			File file = new File(oldFiles.getUrl());
			if (file.isFile()) {
				if (files != null && isFile) {
					file.delete();
				} else {
					String url = FileUploadUtils.getDefaultBaseDir() + files.getFileName() + "." + oldFiles.getSuffix();
					file.renameTo(new File(url));
				}
			}
		}
		return result;
	}

	/**
	 * 删除文件上传信息
	 *
	 * @param ids 需要删除的数据ID
	 * @return 结果
	 */
	@Override
	public int deleteSysFilesByIds(String ids) {
		int result = 0;
		if (ids.length() > 0) {
			for (Long id : ConvertUtils.toLongArray(ids)) {
				SysFiles files = sysFilesMapper.selectSysFilesById(id);
				if (files != null) {
					result = sysFilesMapper.deleteSysFilesById(id);
					//删除成功后要移除文件
					if (result > 0) {
						FileUtils.deleteFile(files.getUrl());
					}
				}
			}
		}
		return result;
	}

	/**
	 * 检验文件名是否唯一
	 *
	 * @param files
	 * @return
	 */
	@Override
	public String checkFileNameUnqiue(SysFiles files) {
		List<SysFiles> filesList = sysFilesMapper.selectSysFilesList(files);
		if (filesList != null && filesList.size() > 0) {
			return UserConstants.FILE_NAME_NOT_UNIQUE;
		}
		return UserConstants.FILE_NAME_UNIQUE;
	}

	/**
	 * 查询文件上传列表(不带显示的)
	 *
	 * @param files
	 * @return
	 */
	@Override
	public List<SysFiles> selectSysFilesListNoSave(SysFiles files) {
		return sysFilesMapper.selectSysFilesList(files);
	}
}
